﻿Public Class ucProdutoCadastro
#Region "Eventos públicos acessados pelo formulário de cadastro"
    Public Event Salvo()
    Public Event Cancelado()
#End Region

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Novo()
        bsProduto.AddNew()
        LoadReferences()
        StatusForm(True)
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="produto"></param>
    ''' <remarks></remarks>
    Public Sub Visualiza(ByVal produto As Model.ProdutoPesquisa)
        StatusForm(False)

        Dim ctrlProduto As New Control.Produto

        bsProduto.DataSource = ctrlProduto.GetById(produto.cd_produto)
        LoadReferences()

    End Sub

    Private Sub LoadReferences()

        Dim Produto As Model.Produto
        Produto = CType(bsProduto.Current, Model.Produto)

        ' Situação Tributária ICMS, IPI, PIS e COFINS
        Using SituacTribICMS As New Control.Tr_Situac_Trib
            bsSituacTribICMS.DataSource = SituacTribICMS.GetByTributo(Model.Tr_Situac_Trib.Tributo.ICMS)
        End Using
        If Produto.SituacTribICMS IsNot Nothing Then
            cbSituacTribICMS.SelectedValue = Produto.SituacTribICMS.cd_tr_situac_trib
        Else
            cbSituacTribICMS.SelectedValue = 0
            cbSituacTribICMS.SelectedItem = Nothing
        End If

        Using SituacTribIPI As New Control.Tr_Situac_Trib
            bsSituacTribIPI.DataSource = SituacTribIPI.GetByTributo(Model.Tr_Situac_Trib.Tributo.IPI)
        End Using
        If Produto.SituacTribIPI IsNot Nothing Then
            cbSituacTribIPI.SelectedValue = Produto.SituacTribIPI.cd_tr_situac_trib
        Else
            cbSituacTribIPI.SelectedValue = 0
            cbSituacTribIPI.SelectedItem = Nothing
        End If

        Using SituacTribPIS As New Control.Tr_Situac_Trib
            bsSituacTribPIS.DataSource = SituacTribPIS.GetByTributo(Model.Tr_Situac_Trib.Tributo.PIS)
        End Using
        If Produto.SituacTribPIS IsNot Nothing Then
            cbSituacTribPIS.SelectedValue = Produto.SituacTribPIS.cd_tr_situac_trib
        Else
            cbSituacTribPIS.SelectedValue = 0
            cbSituacTribPIS.SelectedItem = Nothing
        End If

        Using SituacTribCOFINS As New Control.Tr_Situac_Trib
            bsSituacTribCOFINS.DataSource = SituacTribCOFINS.GetByTributo(Model.Tr_Situac_Trib.Tributo.COFINS)
        End Using
        If Produto.SituacTribCOFINS IsNot Nothing Then
            cbSituacTribCOFINS.SelectedValue = Produto.SituacTribCOFINS.cd_tr_situac_trib
        Else
            cbSituacTribCOFINS.SelectedValue = 0
            cbSituacTribCOFINS.SelectedItem = Nothing
        End If

        ' Origem ICMS
        Using ICMSOrigem As New Control.Tr_ICMS_Origem
            bsICMSOrigem.DataSource = ICMSOrigem.ListaTudo()
        End Using
        If Produto.ICMSOrigem IsNot Nothing Then
            cbICMSOrigem.SelectedValue = Produto.ICMSOrigem.cd_tr_icms_origem
        Else
            cbICMSOrigem.SelectedValue = 0
            cbICMSOrigem.SelectedItem = Nothing
        End If

        ' Modalidade do ICMS e ICMSST
        Using ModICMS As New Control.Tr_ICMS_Modalidade
            bsModICMS.DataSource = ModICMS.ListaTudo()
        End Using
        If Produto.Mod_ICMS IsNot Nothing Then
            cbModICMS.SelectedValue = Produto.Mod_ICMS.cd_tr_icms_mod
        Else
            cbModICMS.SelectedValue = 0
            cbModICMS.SelectedItem = Nothing
        End If

        Using ModICMSST As New Control.Tr_ICMS_Modalidade
            bsModICMSST.DataSource = ModICMSST.ListaTudo()
        End Using
        If Produto.Mod_ICMSST IsNot Nothing Then
            cbModICMSST.SelectedValue = Produto.Mod_ICMSST.cd_tr_icms_mod
        Else
            cbModICMSST.SelectedValue = 0
            cbModICMSST.SelectedItem = Nothing
        End If

        ' Outros
        Using NCM As New Control.NCM
            bsNCM.DataSource = NCM.ListaTudo()
        End Using
        If Produto.Ncm IsNot Nothing Then
            cbNCM.SelectedValue = Produto.Ncm.cd_ncm
        Else
            cbNCM.SelectedValue = 0
            cbNCM.SelectedItem = Nothing
        End If

        Using Unidade As New Control.Unidade
            bsUnidade.DataSource = Unidade.ListaTudo()
        End Using
        If Produto.Unidade IsNot Nothing Then
            cbUnidade.SelectedValue = Produto.Unidade.cd_unidade
        Else
            cbUnidade.SelectedValue = 0
            cbUnidade.SelectedItem = Nothing
        End If
    End Sub


    Private Sub Salvar()
        Dim ctrlProduto As New Control.Produto
        Dim produto As Model.Produto

        bsProduto.EndEdit()
        produto = CType(bsProduto.Current, Model.Produto)

        ' Relacionamentos
        ' Modalidade de ICMS
        If cbModICMS.SelectedIndex > -1 Then
            produto.Mod_ICMS = CType(bsModICMS.Current, Model.Tr_ICMS_Modalidade)
        Else
            produto.Mod_ICMS = Nothing
        End If
        If cbModICMSST.SelectedIndex > -1 Then
            produto.Mod_ICMSST = CType(bsModICMSST.Current, Model.Tr_ICMS_Modalidade)
        Else
            produto.Mod_ICMSST = Nothing
        End If

        ' Situação Tributária ICMS, IPI, PIS e COFINS
        If cbSituacTribICMS.SelectedIndex > -1 Then
            produto.SituacTribICMS = CType(bsSituacTribICMS.Current, Model.Tr_Situac_Trib)
        Else
            produto.SituacTribICMS = Nothing
        End If
        If cbSituacTribIPI.SelectedIndex > -1 Then
            produto.SituacTribIPI = CType(bsSituacTribIPI.Current, Model.Tr_Situac_Trib)
        Else
            produto.SituacTribIPI = Nothing
        End If
        If cbSituacTribPIS.SelectedIndex > -1 Then
            produto.SituacTribPIS = CType(bsSituacTribPIS.Current, Model.Tr_Situac_Trib)
        Else
            produto.SituacTribPIS = Nothing
        End If
        If cbSituacTribCOFINS.SelectedIndex > -1 Then
            produto.SituacTribCOFINS = CType(bsSituacTribCOFINS.Current, Model.Tr_Situac_Trib)
        Else
            produto.SituacTribCOFINS = Nothing
        End If

        ' ICMS Origem
        If cbICMSOrigem.SelectedIndex > -1 Then
            produto.ICMSOrigem = CType(bsICMSOrigem.Current, Model.Tr_ICMS_Origem)
        Else
            produto.ICMSOrigem = Nothing
        End If

        ' Outros
        If cbNCM.SelectedIndex > -1 Then
            produto.Ncm = CType(bsNCM.Current, Model.Ncm)
        Else
            produto.Ncm = Nothing
        End If
        If cbUnidade.SelectedIndex > -1 Then
            produto.Unidade = CType(bsUnidade.Current, Model.Unidade)
        Else
            produto.Unidade = Nothing
        End If

        ctrlProduto.Salvar(produto)
        ctrlProduto = Nothing

        StatusForm(False)

        ' Avisa o form pricipal que salvou para retornar a pesquisa
        RaiseEvent Salvo()
    End Sub

    Private Sub Cancelar()
        ' Faz a treta toda, chama a camada control, cancela...
        bsProduto.CancelEdit()
        StatusForm(False)

        ' Avisa o form pricipal que cancelou para retornar a pesquisa
        RaiseEvent Cancelado()
    End Sub

    Private Sub Editar()
        StatusForm(True)
    End Sub

    Private Sub StatusForm(ByVal Status As Boolean)
        pnlDados.Enabled = Status

        'pnlTributacao.Enabled = Status
        pnlICMS.Enabled = Status
        pnlIPI.Enabled = Status
        pnlPIS.Enabled = Status
        pnlCOFINS.Enabled = Status
        pnlISSQN.Enabled = Status
        pnlII.Enabled = Status


        'pnlCliente.Enabled = Status
        'pnlClienteCampos.Enabled = Status
        'pnlContatoBar.Enabled = Status
        'pnlContatoCampos.Enabled = Status
        'pnlEnderecoBar.Enabled = Status
        'pnlEnderecoCampos.Enabled = Status
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        Salvar()
    End Sub

    Private Sub bntEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntEditar.Click
        Editar()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Cancelar()
    End Sub
End Class